﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web;

namespace VASJ.Common
{
    public static class EnumExtensions
    {
        public static string Description(this Enum value)
        {
            var enumType = value.GetType();
            var field = enumType.GetField(value.ToString());
            var attributes = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
            return attributes.Length == 0 ? value.ToString() : ((DescriptionAttribute)attributes[0]).Description;
        }
    }

    public enum SendMailStatus
    {
        Waiting = 0,
        Sending,
        SendingError,
        Sent,
        NotificationSummFailed,
        NotificationSummed,
    }

    public enum RoomType
    {
        Room = 1,
        PoleRange = 2
    }

    public enum MailType
    {
        [Description("External approval summary")]
        ExternalNotification = 1,

        [Description("Password for new user")]
        NewUserPassword = 2,

        [Description("Password change notification")]
        ChangePassword = 3,

        [Description("Password reset request")]
        ForgotPassword = 4,

        [Description("Notification for inspector")]
        InspectorNotification = 6,

        [Description("Summary for inspector")]
        InspectorNotificationSummary = 7,

        [Description("Notification of design documents")]
        DesignDocNotificationSummary = 8
    }

    public class LMConstants
    {
        //public const int DesignDocument = 1;
        public const int NoDocumentType = 16;
    }

    public enum DocumentTypeCategory
    {
        [Description("Tilaajan suunnitelmat")]
        Designer = 1,

        [Description("Urakoitsijan dokumentit")]
        Contractor = 2,

        [Description("Valvojan dokumentit")]
        Inspector = 3
    }

    public enum DocumentTypeSubCategory
    {
        [Description("Tilaajan suunnitelmat")]
        TilaajanSuunnitelmat = 0,

        [Description("As-built aineisto")]
        AsBuiltAineisto = 1,

        [Description("Huoltodokumentit")]
        Huoltodokumentit = 2,

        [Description("Laatudokumentit")]
        Laatudokumentit = 3,

        [Description("Työturvallisuus")]
        Työturvallisuus = 4,

        [Description("Urakoitsijan laatuaineisto")]
        UrakoitsijanLaatuaineisto = 5,

        [Description("Muu dokumentti")]
        MuuDokumentti = 6,

        [Description("Valvojan dokumentit")]
        ValvojanDokumentit = 7
    }

    public enum DocumentTypeApprovalMethod
    {
        NoApproval = 0,
        ByDesigner = 1,
        ByInspector = 2,
        ByExternalAndInspector = 3
    }

    public enum DocumentStatus
    {
        [Description("Tallennettu")]
        DocumentApprovalWaiting = 1,

        [Description("Hylätty")]
        DocumentNotApproved = 2,

        [Description("Tarkastettu")]
        DocumentApproved = 3,

        [Description("Suunnittelija tarkastettu")]
        ExternalApproved = 4
    }

    public enum TaskAction
    {
        [Description("Dokumenttien lisääminen")]
        AddDocuments = 1,

        [Description("Työsuorituksen kuittaaminen")]
        AskForApproval = 2,
    };

    public enum TaskStatus
    {
        //Document approval waiting
        [Description("Tallennettu")]
        DocumentApprovalWaiting = 1,

        //Document not approved
        [Description("Hylätty")]
        DocumentNotApproved = 2,

        //Document approved
        [Description("Hyväksytty")]
        DocumentApproved = 3,

        //Task approval waiting
        [Description("Lisätty")]
        TaskApprovalWaiting = 4,

        //Task not approved
        [Description("Hylätty")]
        TaskNotApproved = 5,

        //Task approved
        [Description("Valmis")]
        TaskApproved = 6
    }

    //public enum TaskStatusLegend
    //{
    //    [Description("Dokumenttien status ennen kuin kaikki dokumentit on hyväksytty.")]
    //    DocumentApprovalWaiting = 1,

    //    [Description("Dokumenttien status kun kaikki dokumentit on hyväksytty, mutta ei vahvistettu.")]
    //    DocumentNotApproved = 2,

    //    [Description("Valvoja on hyväksynyt urakoitsijan dokumentit. Työsuoritus voidaan kuitata.")]
    //    DocumentApproved = 3,

    //    [Description("Työsuoritus on kuitattu valmiiksi ja odottaa hyväksyntää.")]
    //    TaskApprovalWaiting = 4,

    //    [Description("Dokumentit on hyväksytty, mutta työsuoritus hylätty.")]
    //    TaskNotApproved = 5,

    //    [Description("Dokumentit ja työsuoritus on hyväksytty.")]
    //    TaskApproved = 6
    //}
    public enum TaskStatusLegend
    {
        [Description("Dokumenttien status kun niitä on lisätty tai niihin on tehty muutoksia.")]
        DocumentApprovalWaiting = 1,

        [Description("Dokumenttien status kun jokin dokumentti puuttuu tai niissä on huomautettavaa.")]
        DocumentNotApproved = 2,

        [Description("Valvoja on hyväksynyt urakoitsijan dokumentit. Työsuoritus voidaan kuitata.")]
        DocumentApproved = 3,

        [Description("Työsuoritus on kuitattu valmiiksi ja odottaa hyväksyntää.")]
        TaskApprovalWaiting = 4,

        [Description("Dokumentit on hyväksytty, mutta työsuoritus hylätty.")]
        TaskNotApproved = 5,

        [Description("Dokumentit ja työsuoritus on hyväksytty.")]
        TaskApproved = 6
    }

    public enum ContractStatus
    {
        [Description("Urakka lisätty")]
        ContractAdded = 1,//The contract added

        [Description("Suunnitelmatiedot hyväksytty")]
        PlanDetailApproved = 2,//The plan details approved

        [Description("Toteumatiedot hyväksytty")]
        ActualResultApproved = 3//Actual results approved
    }

    public enum FeatureAttributeType { AttText = 1, AttInteger = 2, AttDecimal = 3, AttDate = 4, AttDateTime = 5, List = 6, Range = 7, Link = 8 }

    public enum PermissionType
    {
        //[Description("ViewFeature")]
        //Feature = 1,

        [Description("Access contract")]
        Contract = 2,

        [Description("View contract")]
        ViewContract = 3,

        [Description("Inspect tasks")]
        Inspector = 4,

        [Description("Approve tasks")]
        Approver = 5,

        [Description("View only approval")]
        ViewApprover = 6,

        [Description("Contract operator")]
        OperatorContract = 7
    }
}